package networking;

import java.io.*;
import java.net.*;
import java.util.*;


/**
 *
 * @author Michael
 */
class LeseThreadServer implements Runnable {
static int length = 256;
DatagramSocket socket;
Vector clients;
static int x,y,spielerAnz;
static int[] positionen;


/**
 * Der LesethreadServer empfängt die Balkenpositionen der einzelnen Clients. Diese ordnet er den einzelnen Spielern zu und erstellt daraus ein Array von Postionen. Das Datenformat ist auch hier xPos;yPos.
 * Die Größe des Array ist hierbei die Anzahl der Spieler multipliziert mit 2, da für jeden Spieler eine x und eine y Position benötigt werden + zwei Werte für die Koordinaten des Balls
 * @param socket
 * @param clients 
 */
LeseThreadServer(DatagramSocket socket, Vector clients) {
    this.socket = socket;
    this.clients = clients;
    this.positionen = new int[2*clients.size()+2];        
    Thread t = new Thread(this);
    t.start();
}

public void run() {
    DatagramPacket packet = new DatagramPacket( new byte[length], length);
    while( true ) {
        try {
            //Die Daten werden empfangen und die Adresse des Clients genutzt, um die Positionen im Array richtig einzuordnen
            socket.receive( packet );
            InetSocketAddress add = (InetSocketAddress)packet.getSocketAddress();
            for(int i=0;i<clients.size();i++){
                //Vergleich der Adresse mit den Client-Adressen
                InetSocketAddress dest = (InetSocketAddress) clients.get(i);
                if(dest.equals(add)){
                    String text = new String(packet.getData(), 0, packet.getLength());
                    //System.out.println(add + " (Spieler " +i + "):" + text);
                    int Beginn=0;
                    int Ende;
                    //Das Array wird wie flogt gefüllt: Sp0x;Sp0y;Sp1x;Sp1y;...
                    for(int l=0;l<text.length();l++){
                        if(text.charAt(l)==';'){
                            Ende=l;                    
                            positionen[i*2] = new Integer((text.substring(Beginn,Ende)));
                            //System.out.println(add + " (Spieler " +i + "):" + positionen[i*2]);                        
                            Beginn=l+1;
                            positionen[i*2+1] = new Integer(text.substring(Beginn,text.length()));
                            //System.out.println(add + " (Spieler " +i + "):" + positionen[i*2+1]);
                        }
                    }                
                }
            }
        }
        catch( IOException e ) {
            System.err.println("Ausnahmefehler: " + e );
        }
    }
}

/**
 * Diese Funktion gibt die Positionen zurück
 * @return 
 */
public static int[] getPos(){
    return positionen;
}
}

